package logic;


import java.io.FileWriter;
import java.io.PrintWriter;
import java.io.Serializable;
import java.util.ArrayList;

/** 
 * Representa la parte logica del tablero de programa. 
 */

public class Board  implements Serializable{

	/**
     * ATTRIBUTES
     */
	// Id del serialize
	private static final long serialVersionUID = -6089860640400677517L;
	// Pestannas (funciones del programa).
	private ArrayList<Pestanna>  _Pestannas;
	private ArrayList<int[]>	_Configuraciones;
	
    public ArrayList<int[]> get_Configuraciones() {
		return _Configuraciones;
	}

	public void set_Configuraciones(ArrayList<int[]> _Configuraciones) {
		this._Configuraciones = _Configuraciones;
	}

	/**
     * Constructor
     * @param _Pestannas
     */
    public Board(ArrayList<Pestanna> _Pestannas) {
		super();
		this._Pestannas = _Pestannas;
	}

    /**
     * Gets
     */
	public ArrayList<Pestanna> get_Pestannas() {
		return _Pestannas;
	}

	/**
	 * Sets
	 */
	public void set_Pestannas(ArrayList<Pestanna> _Pestannas) {
		this._Pestannas = _Pestannas;
	}
	
	/**
	 * Realiza el proceso de compilacion:
	 * Analisis semantico y sintactico.
	 * Retorna un archivo con el codigo generado.
	 * @param pFichero
	 */
	public void compilar( String pFichero ){
		SemanticAnalizer semantic = new SemanticAnalizer();
		semantic.analizarPrograma(this);
		// si existen errores
		if( semantic.getErrorLog() != ""){
			System.out.println(semantic.getErrorLog());
		} else {
			// generar codigo
	        FileWriter fichero = null;
	        PrintWriter 	pw = null;
	        try{
	            fichero = new FileWriter(pFichero+".pde");
	            pw = new PrintWriter(fichero);
	            // imprimir en al fichero
	            pw.println( semantic.getArbolSemantic().GenerarCodigo( _Configuraciones ) );
	        } catch (Exception e) {
	            e.printStackTrace();
	        } finally {
	           try {
	           // cerrar el fichero.
	           if (null != fichero)
	              fichero.close();
	           } catch (Exception e2) {
	              e2.printStackTrace();
	           }
	        }	
		}
	}
	
	
}
